//
//  YTFLoginViewController.swift
//  sinaWeibo
//
//  Created by pro on 16/2/26.
//  Copyright © 2016年 pro. All rights reserved.
//
/*
第一个问题: 成为微博的开发者
1.去: open.weibo.com 完善开发者信息
2.微连接,选择移动应用,创建一个app应用
3.完善应用信息 -- 高级信息(回调网页) /测试信息(添加测试的账号)
4.纪录一些应用信息 --
第二个问题: Token -- Oauth认证
1. 第一个接口文档 -- 能够获取的数据就是一个 code , 用于调用access_token，接口获取授权后的access token
2. 第二个接口文档 --

第一步: App提供一个网页(网页内容是由服务器提供的)
https://api.weibo.com/oauth2/authorize?client_id=101688393&redirect_uri=http://www.itcast.cn&response_type=code
//1016883931
//http://www.itcast.cn
第二步: 我们可以在网页里输入用户名和密码
第三步: 服务器会验证用户名和密码,然后返回网页一个 Code

http://www.itcast.cn/?code=b38d2c2cb6d9dddc47d752d9e53014dc

第四步: App通过一定的方式来获取Code
第五步: App通过这个Code来向服务器请求换取Token
第六步: 服务器验证一下Code,然后返回给App,Token
第七步: App可以通过Token来获取授权用户的数据

*/


import UIKit
import AFNetworking

class YTFLoginViewController: UIViewController ,UIWebViewDelegate{

    var webView: UIWebView?
    
    //把修改view的操作放在loadView中
    override func loadView() {
        
        //这里不需要调用父类的方法，因为已经有下面一句代码，并且完成赋值(寻求理解)
        webView = UIWebView()
        
        view = webView
        
        webView?.delegate = self
        
//        print(webView)
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        setupUI()
        
        //拼接URL
        let url = NSURL(string: "https://api.weibo.com/oauth2/authorize?client_id=\(App_KEY)&redirect_uri=\(App_URL)&response_type=code")!
        
        //创建一个请求
        let request = NSURLRequest(URL: url)
        
        //加载请求
        webView?.loadRequest(request)
        
    }
    
    
    func setupUI(){
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "返回", style: .Plain, target: self, action: "dismiss")
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", style: .Plain, target: self, action: "setupAll")
    }
    
    func dismiss(){
        dismissViewControllerAnimated(true) { () -> Void in
            
        }
    }
    
    //使用js语句注入到webview
    func setupAll(){
        
//        let js = "document.getElementByID(\"userID\").value = \"15210529560\";document.getElementByID(\"passwd\").value = \"andyyou116116\";"
        let js = "document.getElementById(\"userId\").value = \"youtengfei2009@163.com\";document.getElementById(\"passwd\").value = \"andyyou116116\";"
        //注入到webview
        webView?.stringByEvaluatingJavaScriptFromString(js)
    }
    
}


//MARK:UIWebView的代理方法
extension YTFLoginViewController {
    
    func webView(webView: UIWebView, didFailLoadWithError error: NSError?) {
        
    }
    
    
    func webViewDidFinishLoad(webView: UIWebView) {
        
    }
    
    
    func webViewDidStartLoad(webView: UIWebView) {
        
    }
    
    //只要加载响应的街网页就会调用这个方法
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
//        print(request.URL?.absoluteString)
        
        //获取带有code字段的字符串
        //先判断这个URL转换的string是否为空
        if let url = request.URL?.absoluteString {
            
            //获取code的第一种方法
//            //这里说明URL转换的字符串不为空，那么就寻找带有http://www.sina.com.cn前缀的字符串
            if url.hasPrefix(App_URL){
//                //判断出url字符串中含有需要的字符串
//                print(url)//这时候的url就已经是http://www.sina.com.cn/?code=b1d76bd8ec214b427f9208d7448d5c63
//                //截取字符串,根据指定字符串分离出来的是一个字符串数组
//                let subString = url.componentsSeparatedByString("=")
////                print(subString)
//                //判断是否是一个字符数组
//                if subString.count > 0{
//                    
//                let code = subString.last
//                print(code)
//                
//                }
            
            //获取code的第二种方法
                if let code = request.URL?.query {
                    
//                    print(code)
                    
                    //截取字符串
                    let subCode = code.substringFromIndex("code=".endIndex)
                    print(subCode)
                    
                    YTFUserViewModel().loadToken(subCode, success: { () -> () in
                        print("success")
                        
                        //在跳转回上一个控制之前将根控制器修改掉
                        //这里用通知机制来通知AppDelegate来修改根控制器
                    NSNotificationCenter.defaultCenter().postNotificationName("changeRootVC", object: nil)
                        
                        //不再显示回调的网页，转回原来的界面
                        self.dismissViewControllerAnimated(true, completion: { () -> Void in
                            
                        })
                        
                        }, failure: { () -> () in
                            print("failure")
                    })
                }
                
                return false
            }
        }
        return true
    }
}


//通过code获取token
extension YTFLoginViewController {

        
}

//通过token获取用户信息
extension YTFLoginViewController{

        
}

